#include <stdio.h>
#include <string.h>
// 小写函数，传入字符串起始地址
void lower(char *c)
{
    int len = strlen(c);
    for (int i = 0; i < len; i++)
    {
        if (c[i] >= 'A' && c[i] <= 'Z')
            c[i] = c[i] - 'A' + 'a';
    }
}
int main()
{
    int x;
    //scanf与gets有输入流缓冲区冲突，需要对scanf里的回车清除，所以再来一个回车
    scanf("%d\n", &x);
    char sens[x][85];
    for (int i = 0; i < x; i++)
    {
        //利用gets获取带有空格的长句子
        gets(sens[i]);
    }
    for (int i = 0; i < x; i++)
    {
        lower(sens[i]);
        //对句子分割，首先假象第一个句子前面的空格
        int space_position = -1;
        // 获取句子长度
        int len = strlen(sens[i]);
        for (int j = 0; j < len; j++)
        {
            int word_len = 0;
            // 当遇到下一个是空格
            if (sens[i][j] == ' ')
            {
                // 计算词长度
                word_len = j - space_position - 1;
                if (word_len > 4)
                {
                    // 格式化 字符串输出 卡定4位
                    printf("%.4s.", &sens[i][space_position + 1]);
                }
                else
                {
                    // 对字符使用遍历输出，从上一个空格space_position到这一个空格j
                    for (int p = space_position + 1; p < j; p++)
                    {
                        printf("%c", sens[i][p]);
                    }
                }
                // 分隔符
                printf(" ");
                // 更新空格位置
                space_position = j;
            }
            // 当结束句子时
            else if (j == len - 1)
            {
                word_len = j - space_position;
                if (word_len > 4)
                {
                    printf("%.4s.", &sens[i][space_position + 1]);
                }
                else
                {
                    for (int p = space_position + 1; p <= j; p++)
                    {
                        printf("%c", sens[i][p]);
                    }
                }
                printf("\n");
            }
        }
    }
    return 0;
}